{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# 查看当前挂载的数据集目录, 该目录下的变更重启环境后会自动还原\n",
    "# View dataset directory. This directory will be recovered automatically after resetting environment. \n",
    "# !ls /home/aistudio/data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# 查看工作区文件, 该目录下的变更将会持久保存. 请及时清理不必要的文件, 避免加载过慢.\n",
    "# View personal work directory. All changes under this directory will be kept even after reset. Please clean unnecessary files in time to speed up environment loading.\n",
    "# !ls /home/aistudio/work"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Looking in indexes: https://pypi.mirrors.ustc.edu.cn/simple/\n",
      "Collecting tushare\n",
      "\u001b[?25l  Downloading https://mirrors.tuna.tsinghua.edu.cn/pypi/web/packages/af/4c/72c3f36778588beaf2d50fbdade585d781fc6ee841db7d16737964153c91/tushare-1.2.54-py3-none-any.whl (213kB)\n",
      "\u001b[K     |████████████████████████████████| 215kB 20.7MB/s eta 0:00:01\n",
      "\u001b[?25hCollecting lxml>=3.8.0 (from tushare)\n"
     ]
    }
   ],
   "source": [
    "# !pip install tushare\r\n",
    "# !pip install lightgbm # -t /home/aistudio/external-libraries \r\n",
    "# !pip install mpl_finance"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "import numpy as np\r\n",
    "import pandas as pd\r\n",
    "import os\r\n",
    "import tqdm"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "path = 'stock/OldData/002242.SZ_NormalData.csv'\r\n",
    "df = pd.read_csv(path)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "\r\n",
    "base_path = 'stock/features'\r\n",
    "stock_info_copy = pd.read_csv(os.path.join(base_path, 'stock_info.csv'))\r\n",
    "stock_info = pd.read_csv(os.path.join(base_path, 'feature0.csv'))\r\n",
    "stock_info.drop(['open', 'high', 'low', 'close'], axis=1, inplace=True)\r\n",
    "# stock_info.drop_duplicates(inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "\r\n",
    "# 添加涨跌停信息\r\n",
    "limit_info = pd.read_csv(os.path.join(base_path, 'limit.csv'))\r\n",
    "limit_info['U-D'] = limit_info['U'] - limit_info['D']\r\n",
    "limit_info.drop(['U', 'D'], axis=1, inplace=True)\r\n",
    "limit_info = limit_info.rename(columns={'date':'trade_date'})\r\n",
    "stock_info = stock_info.merge(limit_info, on='trade_date', how='left')\r\n",
    "del limit_info"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "\r\n",
    "feature_col = ['month', 'weekday', 'vol', 'open_transform', 'high_transform',\r\n",
    "       'low_transform', 'close_transform',\r\n",
    "       'amount_index_000001_shift_1', 'amount_index_000001_shift_3', \r\n",
    "       'amount_index_000001_shift_5', 'close_index_000001_shift_1',\r\n",
    "       'close_index_000001_shift_3','close_index_000001_shift_5',\r\n",
    "       'amount_shift_1', 'amount_shift_3', 'amount_shift_5', 'close_shift_1', 'close_shift_3',\r\n",
    "        'close_shift_5', 'turnover_rate', 'U-D']"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false
   },
   "source": [
    "# 标签读取"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "label_path = os.path.join('stock','label', 'label.csv')\r\n",
    "label = pd.read_csv(label_path)\r\n",
    "label = label[['ts_date_id', 'label_final', 'open', 'high', 'low', 'close', 'ma5', 'ma13', 'ma21', 'name']]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# stock_info.drop(['open', 'trade_date', 'ts_code'], axis=1, inplace=True)\r\n",
    "label['ts_date_id'] = label['ts_date_id'] - 1\r\n",
    "stock_info = stock_info.merge(label, on='ts_date_id', how='left')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2475341\n"
     ]
    }
   ],
   "source": [
    "stock_info.dropna(inplace=True)\r\n",
    "stock_info = stock_info.reset_index(drop=True)\r\n",
    "print(len(stock_info))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false
   },
   "source": [
    "# 模型训练"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "21"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\r\n",
    "len(feature_col)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "rate of 0: 0.7762, rate of 1: 0.2238\n",
      "trn data:2011124, val data:201234, test data:334367\n",
      "number of features:21\n",
      "['month', 'weekday', 'vol', 'open_transform', 'high_transform', 'low_transform', 'close_transform', 'amount_index_000001_shift_1', 'amount_index_000001_shift_3', 'amount_index_000001_shift_5', 'close_index_000001_shift_1', 'close_index_000001_shift_3', 'close_index_000001_shift_5', 'amount_shift_1', 'amount_shift_3', 'amount_shift_5', 'close_shift_1', 'close_shift_3', 'close_shift_5', 'turnover_rate', 'U-D']\n"
     ]
    }
   ],
   "source": [
    "trn_col = feature_col\r\n",
    "# trn_col.remove('month')\r\n",
    "# 'high', 'low', 'close', 'pre_close',\r\n",
    "# trn_col = list(set(trn_col))\r\n",
    "label = 'label_final'\r\n",
    "# trn_date_min = 20170103\r\n",
    "# trn_date_max = 20190416\r\n",
    "# val_date_min = 20190417\r\n",
    "# val_date_max = 20190429\r\n",
    "# test_date_min = 20190417\r\n",
    "# test_date_max = 20191218\r\n",
    "\r\n",
    "trn_date_min = 20160103\r\n",
    "trn_date_max = 20190831\r\n",
    "val_date_min = 20190101\r\n",
    "val_date_max = 20190419\r\n",
    "test_date_min = 20190901\r\n",
    "test_date_max = 20200301\r\n",
    "\r\n",
    "trn_data_idx = (stock_info['trade_date'] >= trn_date_min) & (stock_info['trade_date'] <= trn_date_max) & (stock_info['high']!=stock_info['close'])\r\n",
    "val_data_idx = (stock_info['trade_date'] >= val_date_min) & (stock_info['trade_date'] <= val_date_max)\r\n",
    "test_data_idx = (stock_info['trade_date'] >= test_date_min) & (stock_info['trade_date'] <= test_date_max)\r\n",
    "\r\n",
    "trn = stock_info[trn_data_idx][trn_col]\r\n",
    "trn_label = stock_info[trn_data_idx][label].values\r\n",
    "\r\n",
    "val = stock_info[val_data_idx][trn_col]\r\n",
    "val_label = stock_info[val_data_idx][label].values \r\n",
    "\r\n",
    "test = stock_info[test_data_idx][trn_col]\r\n",
    "test_label = stock_info[test_data_idx][label].values\r\n",
    "\r\n",
    "print('rate of 0: %.4f, rate of 1: %.4f' % (np.sum(trn_label==0)/len(trn_label), np.sum(trn_label==1)/len(trn_label)))\r\n",
    "print('trn data:%d, val data:%d, test data:%d' % (len(trn), len(val), len(test)))\r\n",
    "print('number of features:%d' % len(trn_col))\r\n",
    "print(feature_col)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# 模型训练及评价\r\n",
    "import lightgbm as lgb\r\n",
    "from sklearn import metrics\r\n",
    "param = {'num_leaves': 31,\r\n",
    "         'min_data_in_leaf': 20,\r\n",
    "         'objective': 'binary',\r\n",
    "         'learning_rate': 0.06,\r\n",
    "         \"boosting\": \"gbdt\",\r\n",
    "#          \"bagging_freq\": 1,\r\n",
    "#          \"bagging_seed\": 11,\r\n",
    "        #  'objective':'multiclass',\r\n",
    "         \"metric\": 'None',\r\n",
    "         \"verbosity\": -1}\r\n",
    "trn_data = lgb.Dataset(trn, trn_label)\r\n",
    "val_data = lgb.Dataset(val, val_label)\r\n",
    "num_round = 666\r\n",
    "# clf = lgb.train(param, trn_data, num_round, valid_sets=[trn_data, val_data], verbose_eval=100,\r\n",
    "#                 early_stopping_rounds=300, feval=win_score_eval)\r\n",
    "clf = lgb.train(param, trn_data, num_round)\r\n",
    "# oof_lgb = clf.predict(val, num_iteration=clf.best_iteration)\r\n",
    "test_lgb = clf.predict(test, num_iteration=clf.best_iteration)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# 模型保存\r\n",
    "import pickle\r\n",
    "save_path = 'model.pickle'\r\n",
    "with open(save_path, 'wb') as f:\r\n",
    "    pickle.dump(clf, f)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>column</th>\n",
       "      <th>importance</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>U-D</td>\n",
       "      <td>1598</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>month</td>\n",
       "      <td>1577</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>close_index_000001_shift_1</td>\n",
       "      <td>1541</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>close_index_000001_shift_5</td>\n",
       "      <td>1505</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>close_index_000001_shift_3</td>\n",
       "      <td>1503</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>amount_index_000001_shift_3</td>\n",
       "      <td>1399</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>amount_index_000001_shift_1</td>\n",
       "      <td>1384</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>amount_index_000001_shift_5</td>\n",
       "      <td>1365</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>turnover_rate</td>\n",
       "      <td>1267</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>close_shift_1</td>\n",
       "      <td>794</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>low_transform</td>\n",
       "      <td>740</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>close_shift_5</td>\n",
       "      <td>730</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>high_transform</td>\n",
       "      <td>669</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>close_shift_3</td>\n",
       "      <td>649</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>vol</td>\n",
       "      <td>609</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>close_transform</td>\n",
       "      <td>530</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>amount_shift_1</td>\n",
       "      <td>456</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>open_transform</td>\n",
       "      <td>432</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>amount_shift_3</td>\n",
       "      <td>428</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>amount_shift_5</td>\n",
       "      <td>419</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>weekday</td>\n",
       "      <td>385</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                         column  importance\n",
       "20                          U-D        1598\n",
       "0                         month        1577\n",
       "10   close_index_000001_shift_1        1541\n",
       "12   close_index_000001_shift_5        1505\n",
       "11   close_index_000001_shift_3        1503\n",
       "8   amount_index_000001_shift_3        1399\n",
       "7   amount_index_000001_shift_1        1384\n",
       "9   amount_index_000001_shift_5        1365\n",
       "19                turnover_rate        1267\n",
       "16                close_shift_1         794\n",
       "5                 low_transform         740\n",
       "18                close_shift_5         730\n",
       "4                high_transform         669\n",
       "17                close_shift_3         649\n",
       "2                           vol         609\n",
       "6               close_transform         530\n",
       "13               amount_shift_1         456\n",
       "3                open_transform         432\n",
       "14               amount_shift_3         428\n",
       "15               amount_shift_5         419\n",
       "1                       weekday         385"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.DataFrame({\r\n",
    "        'column': trn_col,\r\n",
    "        'importance': clf.feature_importance(),\r\n",
    "    }).sort_values(by='importance', ascending=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false
   },
   "source": [
    "# 读取指数信息"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# #############\r\n",
    "# 读取指数信息\r\n",
    "# ############\r\n",
    "base_path = 'stock'\r\n",
    "index_df = pd.read_csv(os.path.join(base_path,  'OldData', '000001.SH' + '_NormalData.csv'))\r\n",
    "tmp_idx = (index_df['trade_date'] >= test_date_min) & (index_df['trade_date'] <= test_date_max)\r\n",
    "index_df = index_df.loc[tmp_idx].reset_index()\r\n",
    "index_df.drop('index', axis=1, inplace=True)\r\n",
    "\r\n",
    "tmp_list = list(index_df['trade_date'].sort_values())\r\n",
    "date_map = dict(zip(tmp_list, range(len(tmp_list))))\r\n",
    "index_df['trade_date_id'] = index_df['trade_date'].map(date_map)\r\n",
    "\r\n",
    "index_df['rate1'] = (index_df['open'] - index_df['pre_close']) / index_df['pre_close']\r\n",
    "index_df['rate2'] = (index_df['close'] - index_df['pre_close']) / index_df['pre_close']\r\n",
    "\r\n",
    "# 指数清仓指标\r\n",
    "index_df['sell_flag'] = 0\r\n",
    "\r\n",
    "# 收盘大跌1.5个点，sell flag=2\r\n",
    "idx = index_df['rate2'] <= -0.015\r\n",
    "index_df.loc[idx, 'sell_flag'] = 2\r\n",
    "\r\n",
    "# 开盘大跌两个点，sell flag=1\r\n",
    "\r\n",
    "idx = index_df['rate1'] <= -0.02\r\n",
    "index_df.loc[idx, 'sell_flag'] = 1\r\n",
    "\r\n",
    "index_df = index_df.sort_values('trade_date', ascending=True).reset_index(drop=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false
   },
   "source": [
    "# 回测"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.18886596, 0.10227889, 0.117513  , ..., 0.10702118, 0.65277511,\n",
       "       0.33141791])"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_lgb"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['month', 'weekday', 'vol', 'open_transform', 'high_transform',\n",
       "       'low_transform', 'high_transform.1', 'close_transform',\n",
       "       'amount_index_000001_shift_1', 'amount_index_000001_shift_2',\n",
       "       'amount_index_000001_shift_3', 'amount_index_000001_shift_4',\n",
       "       'amount_index_000001_shift_5', 'close_index_000001_shift_1',\n",
       "       'close_index_000001_shift_2', 'close_index_000001_shift_3',\n",
       "       'close_index_000001_shift_4', 'close_index_000001_shift_5',\n",
       "       'amount_shift_1', 'amount_shift_2', 'amount_shift_3', 'amount_shift_4',\n",
       "       'amount_shift_5', 'close_shift_1', 'close_shift_2', 'close_shift_3',\n",
       "       'close_shift_4', 'close_shift_5', 'turnover_rate', 'trade_date',\n",
       "       'ts_code', 'ts_date_id', 'U_max_5', 'D_max_5', 'U_mean_5', 'D_mean_5',\n",
       "       'Umean-Dmeam5', 'U_max_10', 'D_max_10', 'U_mean_10', 'D_mean_10',\n",
       "       'Umean-Dmeam10', 'U_max_13', 'D_max_13', 'U_mean_13', 'D_mean_13',\n",
       "       'Umean-Dmeam13', 'U_max_21', 'D_max_21', 'U_mean_21', 'D_mean_21',\n",
       "       'Umean-Dmeam21', 'U-D', 'label_final', 'open', 'high', 'low', 'close',\n",
       "       'ma5', 'ma13', 'ma21', 'name'],\n",
       "      dtype='object')"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "stock_info.columns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "thresh_hold = 0.5\r\n",
    "oof_test_final = test_lgb >= thresh_hold\r\n",
    "\r\n",
    "print(metrics.accuracy_score(test_label, oof_test_final))\r\n",
    "print(metrics.confusion_matrix(test_label, oof_test_final))\r\n",
    "tp = np.sum(((oof_test_final == 1) & (test_label == 1)))\r\n",
    "pp = np.sum(oof_test_final == 1)\r\n",
    "print('accuracy1:%.3f'% (tp/(pp)))\r\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([False, False, False, ..., False,  True, False])"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "oof_test_final"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "\r\n",
    "# test_postive_idx = np.argwhere(oof_test_final != 0).reshape(-1)\r\n",
    "test_postive_idx = np.argwhere(oof_test_final == True).reshape(-1)\r\n",
    "# test_postive_idx = list(range(len(oof_test_final)))\r\n",
    "test_all_idx = np.argwhere(np.array(test_data_idx)).reshape(-1)\r\n",
    "stock_info['trade_date_id'] = stock_info['trade_date'].map(date_map)\r\n",
    "stock_info['trade_date_id'] = stock_info['trade_date_id'] + 1 # 向下移动一天"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "\r\n",
    "# 查看选了哪些股票\r\n",
    "\r\n",
    "tmp_col = ['ts_code', 'trade_date', 'trade_date_id', 'open', 'high', 'low', 'close', \r\n",
    "           'ma5', 'ma13', 'ma21', 'label_final', 'name']\r\n",
    "# stock_info.iloc[test_all_idx[test_postive_idx]]\r\n",
    "\r\n",
    "tmp_df = stock_info[tmp_col].iloc[test_all_idx[test_postive_idx]].reset_index()\r\n",
    "tmp_df['label_prob'] = test_lgb[test_postive_idx]\r\n",
    "# idx_tmp = tmp_df['is_ST'] == 0\r\n",
    "# tmp_df.loc[idx_tmp, 'is_limit_up'] = (((tmp_df['close'][idx_tmp]-tmp_df['pre_close'][idx_tmp]) / tmp_df['pre_close'][idx_tmp]) > 0.095)\r\n",
    "# idx_tmp = tmp_df['is_ST'] == 1\r\n",
    "# tmp_df.loc[idx_tmp, 'is_limit_up'] = (((tmp_df['close'][idx_tmp]-tmp_df['pre_close'][idx_tmp]) / tmp_df['pre_close'][idx_tmp]) > 0.047)\r\n",
    "\r\n",
    "tmp_df['is_limit_up'] = tmp_df['close'] == tmp_df['high']\r\n",
    "\r\n",
    "buy_df = tmp_df[(tmp_df['is_limit_up']==False)].reset_index()\r\n",
    "buy_df.drop(['index', 'level_0'], axis=1, inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "buy_df['buy_flag'] = 1\r\n",
    "stock_info_copy['sell_flag'] = 0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "43056 20331.0\n",
      "43056 20331\n"
     ]
    }
   ],
   "source": [
    "print(len(buy_df), sum(buy_df['label_final']))\r\n",
    "print(len(buy_df), sum(buy_df['label_final']==1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "\r\n",
    "tmp_idx = (index_df['trade_date'] == test_date_min+1)\r\n",
    "close1 = index_df[tmp_idx]['close'].values[0]\r\n",
    "test_date_max = 20200228\r\n",
    "tmp_idx = (index_df['trade_date'] == test_date_max)\r\n",
    "close2 = index_df[tmp_idx]['close'].values[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "\r\n",
    "tmp_idx = (stock_info_copy['trade_date'] >= test_date_min) & (stock_info_copy['trade_date'] <= test_date_max)\r\n",
    "tmp_df = stock_info_copy[tmp_idx].reset_index(drop=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "20190923  买入 德宏股份 (603701.SH) 1500股，股价：13.25,花费：19875.0,手续费：5.96，剩余现金：80119.04\n",
      "20190923  买入 深大通 (000038.SZ) 1400股，股价：13.58,花费：19012.0,手续费：5.7，剩余现金：61101.33\n",
      "20190923  买入 恒铭达 (002947.SZ) 300股，股价：61.27,花费：18381.0,手续费：5.51，剩余现金：42714.82\n",
      "20190923  买入 易尚展示 (002751.SZ) 600股，股价：30.4,花费：18240.0,手续费：5.47，剩余现金：24469.35\n",
      "20190923  买入 海星股份 (603115.SH) 700股，股价：27.6,花费：19320.0,手续费：5.8，剩余现金：5143.55\n",
      "20190923  买入 柯力传感 (603662.SH) 100股，股价：48.76,花费：4876.0,手续费：5，剩余现金：262.55\n",
      "20190925  止损卖出海星股份 (603115.SH) 700股，股价：25.392,收入：17774.4,手续费：23.11，剩余现金：18013.84，最终亏损：-1574.5\n",
      "20190925  止损卖出易尚展示 (002751.SZ) 600股，股价：27.967999999999996,收入：16780.8,手续费：21.82，剩余现金：34772.83，最终亏损：-1486.49\n",
      "20190926  止损卖出柯力传感 (603662.SH) 100股，股价：44.859199999999994,收入：4485.92,手续费：9.49，剩余现金：39249.26，最终亏损：-404.57\n",
      "20190926  止损卖出恒铭达 (002947.SZ) 300股，股价：56.3684,收入：16910.52,手续费：21.98，剩余现金：56137.8，最终亏损：-1497.98\n",
      "20190926  止损卖出深大通 (000038.SZ) 1400股，股价：12.493599999999999,收入：17491.04,手续费：22.74，剩余现金：73606.1，最终亏损：-1549.4\n",
      "20190926  止损卖出德宏股份 (603701.SH) 1500股，股价：12.19,收入：18285.0,手续费：23.77，剩余现金：91867.33，最终亏损：-1619.73\n",
      "20191010  买入 中航三鑫 (002163.SZ) 3800股，股价：4.72,花费：17936.0,手续费：5.38，剩余现金：73925.95\n",
      "20191014  买入 信立泰 (002294.SZ) 900股，股价：19.22,花费：17298.0,手续费：5.19，剩余现金：56622.76\n",
      "20191014  买入 中润资源 (000506.SZ) 6300股，股价：2.91,花费：18333.0,手续费：5.5，剩余现金：38284.26\n",
      "20191014  买入 中国海防 (600764.SH) 600股，股价：29.07,花费：17442.0,手续费：5.23，剩余现金：20837.03\n",
      "20191014  买入 北汽蓝谷 (600733.SH) 2800股，股价：6.37,花费：17836.0,手续费：5.35，剩余现金：2995.68\n",
      "20191018  止损卖出中润资源 (000506.SZ) 6300股，股价：2.6772,收入：16866.36,手续费：21.93，剩余现金：19840.11，最终亏损：-1494.07\n",
      "20191021  买入 *ST刚泰 (600687.SH) 10200股，股价：1.77,花费：18054.0,手续费：5.42，剩余现金：1780.7\n",
      "20191030  止损卖出北汽蓝谷 (600733.SH) 2800股，股价：5.84,收入：16352.0,手续费：21.35，剩余现金：18111.34，最终亏损：-1510.7\n",
      "20191031  止损卖出*ST刚泰 (600687.SH) 10200股，股价：1.6,收入：16320.0,手续费：21.32，剩余现金：34410.02，最终亏损：-1760.74\n",
      "20191101  止损卖出中国海防 (600764.SH) 600股，股价：26.7444,收入：16046.64,手续费：21.05，剩余现金：50435.62，最终亏损：-1421.64\n",
      "20191106  到期卖出中航三鑫 (002163.SZ) 3800股，股价：4.85,收入：18430.0,手续费：23.96，剩余现金：68841.66，最终盈利：464.66\n",
      "20191108  到期卖出信立泰 (002294.SZ) 900股，股价：18.92,收入：17028.0,手续费：22.14，剩余现金：85847.52，最终亏损：-297.33\n",
      "20191231  买入 南宁百货 (600712.SH) 1900股，股价：8.97,花费：17043.0,手续费：5.11，剩余现金：68799.41\n",
      "20200103  买入 奋达科技 (002681.SZ) 2900股，股价：5.83,花费：16907.0,手续费：5.07，剩余现金：51887.34\n",
      "20200103  买入 智光电气 (002169.SZ) 2400股，股价：7.2,花费：17280.0,手续费：5.18，剩余现金：34602.15\n",
      "20200103  买入 交建股份 (603815.SH) 900股，股价：17.91,花费：16119.0,手续费：5，剩余现金：18478.15\n",
      "20200103  买入 博敏电子 (603936.SH) 900股，股价：17.9,花费：16110.0,手续费：5，剩余现金：2363.15\n",
      "20200103  止盈卖出南宁百货 (600712.SH) 1900股，股价：10.046400000000002,收入：19088.16,手续费：24.81，剩余现金：21426.5，最终盈利：2015.23\n",
      "20200106  买入 商赢环球 (600146.SH) 1200股，股价：13.65,花费：16380.0,手续费：5，剩余现金：5041.5\n",
      "20200106  买入 协鑫集成 (002506.SZ) 800股，股价：5.84,花费：4672.0,手续费：5，剩余现金：364.5\n",
      "20200108  止盈卖出博敏电子 (603936.SH) 900股，股价：20.048000000000002,收入：18043.2,手续费：23.46，剩余现金：18384.24，最终盈利：1904.74\n",
      "20200109  买入 中国建筑 (601668.SH) 2900股，股价：6.0,花费：17400.0,手续费：5.22，剩余现金：979.02\n",
      "20200113  止损卖出协鑫集成 (002506.SZ) 800股，股价：5.3728,收入：4298.24,手续费：9.3，剩余现金：5267.96，最终亏损：-388.06\n",
      "20200114  买入 永悦科技 (603879.SH) 500股，股价：9.95,花费：4975.0,手续费：5，剩余现金：287.96\n",
      "20200114  止盈卖出商赢环球 (600146.SH) 1200股，股价：15.288000000000002,收入：18345.6,手续费：23.85，剩余现金：18609.71，最终盈利：1936.75\n",
      "20200117  止损卖出永悦科技 (603879.SH) 500股，股价：9.153999999999998,收入：4577.0,手续费：9.58，剩余现金：23177.14，最终亏损：-412.58\n",
      "20200120  止损卖出奋达科技 (002681.SZ) 2900股，股价：5.3636,收入：15554.44,手续费：20.55，剩余现金：38711.02，最终亏损：-1378.19\n",
      "20200121  止损卖出交建股份 (603815.SH) 900股，股价：16.4772,收入：14829.48,手续费：19.83，剩余现金：53520.67，最终亏损：-1314.35\n",
      "20200122  买入 惠发食品 (603536.SH) 1200股，股价：13.59,花费：16308.0,手续费：5，剩余现金：37207.67\n",
      "20200122  买入 ST中新 (603996.SH) 4300股，股价：3.98,花费：17114.0,手续费：5.13，剩余现金：20088.54\n",
      "20200122  买入 延安必康 (002411.SZ) 1200股，股价：13.59,花费：16308.0,手续费：5，剩余现金：3775.54\n",
      "20200122  止损卖出中国建筑 (601668.SH) 2900股，股价：5.52,收入：16008.0,手续费：21.01，剩余现金：19762.53，最终亏损：-1418.23\n",
      "20200123  止损卖出延安必康 (002411.SZ) 1200股，股价：12.502799999999999,收入：15003.36,手续费：20.0，剩余现金：34745.89，最终亏损：-1329.64\n",
      "20200123  止损卖出ST中新 (603996.SH) 4300股，股价：4.02,收入：17286.0,手续费：22.47，剩余现金：52009.42，最终亏损：144.39\n",
      "20200123  止损卖出惠发食品 (603536.SH) 1200股，股价：12.502799999999999,收入：15003.36,手续费：20.0，剩余现金：66992.77，最终亏损：-1329.64\n",
      "20200123  止损卖出智光电气 (002169.SZ) 2400股，股价：7.17,收入：17208.0,手续费：22.37，剩余现金：84178.4，最终亏损：-99.55\n",
      "20200203  买入 金洲慈航 (000587.SZ) 11600股，股价：1.45,花费：16820.0,手续费：5.05，剩余现金：67353.36\n",
      "20200203  买入 延安必康 (002411.SZ) 1300股，股价：12.88,花费：16744.0,手续费：5.02，剩余现金：50604.33\n",
      "20200203  买入 惠发食品 (603536.SH) 1500股，股价：11.16,花费：16740.0,手续费：5.02，剩余现金：33859.31\n",
      "20200203  买入 荣华实业 (600311.SH) 6800股，股价：2.47,花费：16796.0,手续费：5.04，剩余现金：17058.27\n",
      "20200203  买入 鄂武商A (000501.SZ) 1600股，股价：9.97,花费：15952.0,手续费：5，剩余现金：1101.27\n",
      "20200204  止损卖出鄂武商A (000501.SZ) 1600股，股价：9.9,收入：15840.0,手续费：20.84，剩余现金：16920.43，最终亏损：-137.84\n",
      "20200204  止损卖出荣华实业 (600311.SH) 6800股，股价：2.41,收入：16388.0,手续费：21.39，剩余现金：33287.04，最终亏损：-434.43\n",
      "20200204  止损卖出惠发食品 (603536.SH) 1500股，股价：11.0,收入：16500.0,手续费：21.5，剩余现金：49765.54，最终亏损：-266.52\n",
      "20200204  止损卖出延安必康 (002411.SZ) 1300股，股价：12.45,收入：16185.0,手续费：21.18，剩余现金：65929.36，最终亏损：-585.21\n",
      "20200204  止损卖出金洲慈航 (000587.SZ) 11600股，股价：1.32,收入：15312.0,手续费：20.31，剩余现金：81221.05，最终亏损：-1533.36\n",
      "20200205  买入 柏堡龙 (002776.SZ) 1900股，股价：8.33,花费：15827.0,手续费：5，剩余现金：65389.05\n",
      "20200205  买入 常山北明 (000158.SZ) 2400股，股价：6.64,花费：15936.0,手续费：5，剩余现金：49448.05\n",
      "20200205  买入 阿科力 (603722.SH) 500股，股价：32.34,花费：16170.0,手续费：5，剩余现金：33273.05\n",
      "20200205  买入 中广天择 (603721.SH) 600股，股价：23.62,花费：14172.0,手续费：5，剩余现金：19096.05\n",
      "20200205  买入 慈文传媒 (002343.SZ) 1500股，股价：10.3,花费：15450.0,手续费：5，剩余现金：3641.05\n",
      "20200206  止盈卖出柏堡龙 (002776.SZ) 1900股，股价：9.329600000000001,收入：17726.24,手续费：23.04，剩余现金：21344.24，最终盈利：1871.2\n",
      "20200207  买入 京汉股份 (000615.SZ) 5200股，股价：3.35,花费：17420.0,手续费：5.23，剩余现金：3919.02\n",
      "20200207  止盈卖出常山北明 (000158.SZ) 2400股，股价：7.436800000000001,收入：17848.32,手续费：23.2，剩余现金：21744.13，最终盈利：1884.12\n",
      "20200210  买入 口子窖 (603589.SH) 400股，股价：43.6,花费：17440.0,手续费：5.23，剩余现金：4298.9\n",
      "20200211  止盈卖出京汉股份 (000615.SZ) 5200股，股价：3.93,收入：20436.0,手续费：26.57，剩余现金：24708.34，最终盈利：2984.21\n",
      "20200212  买入 胜利精密 (002426.SZ) 10000股，股价：1.8,花费：18000.0,手续费：5.4，剩余现金：6702.94\n",
      "20200212  买入 惠发食品 (603536.SH) 500股，股价：13.09,花费：6545.0,手续费：5，剩余现金：152.94\n",
      "20200213  止盈卖出胜利精密 (002426.SZ) 10000股，股价：2.0160000000000005,收入：20160.0,手续费：26.21，剩余现金：20286.73，最终盈利：2128.39\n",
      "20200214  止损卖出中广天择 (603721.SH) 600股，股价：21.7304,收入：13038.24,手续费：18.04，剩余现金：33306.93，最终亏损：-1156.8\n",
      "20200217  买入 南宁百货 (600712.SH) 2700股，股价：6.77,花费：18279.0,手续费：5.48，剩余现金：15022.45\n",
      "20200217  止盈卖出慈文传媒 (002343.SZ) 1500股，股价：11.536000000000001,收入：17304.0,手续费：22.5，剩余现金：32303.95，最终盈利：1826.5\n",
      "20200218  买入 中航三鑫 (002163.SZ) 3200股，股价：5.82,花费：18624.0,手续费：5.59，剩余现金：13674.36\n",
      "20200218  买入 东信和平 (002017.SZ) 1000股，股价：13.48,花费：13480.0,手续费：5，剩余现金：189.36\n",
      "20200218  止盈卖出阿科力 (603722.SH) 500股，股价：36.220800000000004,收入：18110.4,手续费：23.54，剩余现金：18276.22，最终盈利：1911.86\n",
      "20200219  买入 康德莱 (603987.SH) 1900股，股价：9.59,花费：18221.0,手续费：5.47，剩余现金：49.75\n",
      "20200219  止盈卖出惠发食品 (603536.SH) 500股，股价：14.660800000000002,收入：7330.4,手续费：12.33，剩余现金：7367.82，最终盈利：768.07\n",
      "20200220  买入 尚纬股份 (603333.SH) 900股，股价：7.58,花费：6822.0,手续费：5，剩余现金：540.82\n",
      "20200220  止盈卖出康德莱 (603987.SH) 1900股，股价：10.7408,收入：20407.52,手续费：26.53，剩余现金：20921.81，最终盈利：2154.52\n",
      "20200221  买入 金徽酒 (603919.SH) 1200股，股价：15.57,花费：18684.0,手续费：5.61，剩余现金：2232.21\n",
      "20200221  止盈卖出中航三鑫 (002163.SZ) 3200股，股价：6.518400000000001,收入：20858.88,手续费：27.12，剩余现金：23063.97，最终盈利：2202.18\n",
      "20200221  止盈卖出口子窖 (603589.SH) 400股，股价：48.83200000000001,收入：19532.8,手续费：25.39，剩余现金：42571.38，最终盈利：2062.18\n",
      "20200224  买入 华讯方舟 (000687.SZ) 3800股，股价：5.3,花费：20140.0,手续费：6.04，剩余现金：22425.34\n",
      "20200224  买入 引力传媒 (603598.SH) 1200股，股价：16.09,花费：19308.0,手续费：5.79，剩余现金：3111.54\n",
      "20200224  止盈卖出东信和平 (002017.SZ) 1000股，股价：15.097600000000002,收入：15097.6,手续费：20.1，剩余现金：18189.05，最终盈利：1592.5\n",
      "20200225  买入 鲁商发展 (600223.SH) 2000股，股价：8.9,花费：17800.0,手续费：5.34，剩余现金：383.71\n",
      "20200226  止损卖出鲁商发展 (600223.SH) 2000股，股价：8.187999999999999,收入：16376.0,手续费：21.38，剩余现金：16738.33，最终亏损：-1450.72\n",
      "20200228  买入 *ST信威 (600485.SH) 11000股，股价：1.52,花费：16720.0,手续费：5.02，剩余现金：13.31\n",
      "20200228  止损卖出引力传媒 (603598.SH) 1200股，股价：15.6,收入：18720.0,手续费：24.34，剩余现金：18708.98，最终亏损：-618.13\n",
      "20200228  止损卖出华讯方舟 (000687.SZ) 3800股，股价：5.08,收入：19304.0,手续费：25.1，剩余现金：37987.88，最终亏损：-867.14\n",
      "20200228  止损卖出金徽酒 (603919.SH) 1200股，股价：14.9,收入：17880.0,手续费：23.24，剩余现金：55844.64，最终亏损：-832.85\n",
      "20200228  止损卖出尚纬股份 (603333.SH) 900股，股价：7.07,收入：6363.0,手续费：11.36，剩余现金：62196.28，最终亏损：-475.36\n",
      "20200228  止损卖出南宁百货 (600712.SH) 2700股，股价：6.35,收入：17145.0,手续费：22.29，剩余现金：79318.99，最终亏损：-1161.77\n"
     ]
    }
   ],
   "source": [
    "\r\n",
    "from imp import reload\r\n",
    "import Account\r\n",
    "reload(Account)\r\n",
    "money_init = 100000\r\n",
    "account = Account.Account(money_init, max_hold_period=20, stop_loss_rate=-0.07, stop_profit_rate=0.12)\r\n",
    "account.BackTest(buy_df, tmp_df, index_df, buy_price='open')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "\r\n",
    "tmp_df2 = buy_df[['ts_code', 'trade_date', 'label_prob', 'label_final']]\r\n",
    "tmp_df2 = tmp_df2.rename(columns={'trade_date':'buy_date'}) \r\n",
    "tmp_df = account.info\r\n",
    "tmp_df['buy_date'] = tmp_df['buy_date'].apply(lambda x: int(x)) \r\n",
    "tmp_df = tmp_df.merge(tmp_df2, on=['ts_code', 'buy_date'], how='left')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "账户盈利情况:-0.0396\n",
      "上证指数浮动情况:-0.0150\n",
      "交易胜率:0.3191\n",
      "最大回撤率:0.1878\n"
     ]
    }
   ],
   "source": [
    "\r\n",
    "account_profit = (account.market_value - money_init) / money_init\r\n",
    "index_profit = (close2 - close1) / close1\r\n",
    "win_rate = account.victory / (account.victory + account.defeat)\r\n",
    "print('账户盈利情况:%.4f' % account_profit)\r\n",
    "print('上证指数浮动情况:%.4f' % index_profit)\r\n",
    "print('交易胜率:%.4f' % win_rate)\r\n",
    "print('最大回撤率:%.4f' % account.max_retracement)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/mpl_finance.py:22: DeprecationWarning: \n",
      "\n",
      "  =================================================================\n",
      "\n",
      "   WARNING: `mpl_finance` is deprecated:\n",
      "\n",
      "    Please use `mplfinance` instead (no hyphen, no underscore).\n",
      "\n",
      "    To install: `pip install --upgrade mplfinance` \n",
      "\n",
      "   For more information, see: https://pypi.org/project/mplfinance/\n",
      "\n",
      "  =================================================================\n",
      "\n",
      "  category=DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAswAAAHjCAYAAAA3w0lkAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzs3Xd4VGX2wPHvTa8kEEJoaSBdOiqIIKioKCIqiNiwrw3LrmvZ/bm6rrvrrrqrrmXFhriCBTuoFAVBqaETEEIvCRASIBDS5/7+OBlCSZvJnbkzk/N5njxjptz7JpLkzLnnPccwTROllFJKKaVU9YLsXoBSSimllFK+TANmpZRSSimlaqEBs1JKKaWUUrXQgFkppZRSSqlaaMCslFJKKaVULTRgVkoppZRSqhYaMCullFJKKVULDZiVUkoppZSqhQbMSimllFJK1SLE7gWcqnnz5mZaWprdy1BKKaWUUgFu+fLlB0zTTKzreT4XMKelpZGRkWH3MpRSSimlVIAzDGNHfZ6nJRlKKaWUUkrVQgNmpZRSSimlaqEBs1JKKaWUUrXwuRpmpZRSSqlAV1ZWxu7duykuLrZ7KY1CREQEbdu2JTQ01K3Xa8CslFJKKeVlu3fvJjY2lrS0NAzDsHs5Ac00TfLy8ti9ezfp6eluHUNLMpRSSimlvKy4uJiEhAQNlr3AMAwSEhIalM3XgFkppZRSygYaLHtPQ7/XGjArpZRSSilVCw2YlVJKKaUaIcMwuPHGG49/Xl5eTmJiIiNGjLBxVQ3z5Zdfsn79esuPqwGzUkoppVQjFB0dzbp16ygqKgJg9uzZtGnTxuZVNYynAmbtkqGUUkopZaM/f5PJ+uwCS4/ZtXUTnrqiW53Pu+yyy5gxYwajR49m6tSpjBs3jgULFuBwOOjUqRMLFy4kMTERh8NBx44dWbRoEYmJicdfv3TpUh588EGKi4uJjIzkvffeo1OnTlRUVPDYY4/x/fffExQUxJ133smECRNYtmwZDz74IIWFhYSHh/PDDz8QGhrKPffcQ0ZGBiEhIfzrX/9i6NChTJo0iYyMDF599VUARowYwSOPPMKQIUOIiYnhwQcfZPr06URGRvLVV1+xZcsWvv76a3766SeeffZZPvvsM9q3b2/J91MzzEoppZRSjdR1113HRx99RHFxMWvWrOGcc84BICgoiBtvvJEPP/wQgDlz5tCzZ8+TgmWAzp07s2DBAlauXMkzzzzDH/7wBwAmTpzI9u3bWbVqFWvWrOGGG26gtLSUsWPH8vLLL7N69WrmzJlDZGQkr732GoZhsHbtWqZOncr48ePr7GhRWFhI//79Wb16NYMHD+att97i3HPPZeTIkTz//POsWrXKsmAZNMOslFJKKWWr+mSCPaVHjx5s376dqVOnctlll5302G233caVV17JQw89xLvvvsutt9562usPHz7M+PHjycrKwjAMysrKAAmw7777bkJCJNRs1qwZa9eupVWrVpx11lkANGnSBICff/6ZCRMmABKAp6amsmnTplrXHRYWdrzWum/fvsyePbsB34W6aYZZKaWUUqoRGzlyJI888gjjxo076f7k5GSSkpL48ccfWbp0KcOHDz/ttU8++SRDhw5l3bp1fPPNN5ZOLgwJCcHhcBz//MRjh4aGHm8VFxwcTHl5uWXnrY4GzEoppZRSjdhtt93GU089Rffu3U977I477uDGG29kzJgxBAcHn/b44cOHj28UnDRp0vH7hw0bxptvvnk8kM3Pz6dTp07k5OSwbNkyAI4cOUJ5eTmDBg06XvqxadMmdu7cSadOnUhLS2PVqlU4HA527drF0qVL6/xaYmNjOXLkiMvfg7powKyUUkop1Yi1bduWBx54oNrHRo4cydGjR6stxwB49NFHeeKJJ+jdu/dJWd477riDlJQUevToQc+ePZkyZQphYWF8/PHHTJgwgZ49ezJs2DCKi4u59957cTgcdO/enbFjxzJp0iTCw8MZOHAg6enpdO3alQceeIA+ffrU+bVcd911PP/88/Tu3ZstW7a49w2phmGapmUHs0K/fv3MjIwMu5ehlFJKqbo4HBCkuTd3bNiwgS5duti9jDplZGTw8MMPs2DBAruX0mDVfc8Nw1humma/ul6rm/6UUkop5TrThMkjwVEO106GmBZ2r0hZ7LnnnuONN944Xi7RmOnbQqWUUkq5bsdC2L4Adi6Cty+E3I12r0hZ7PHHH2fHjh2cd955di/FdhowK6WUUsp1S96AyKZwy7dQVgzvDINt8+1elVIeoQGzUkoppVxzcDv8OgP63gppA+GOORDbCj64ClZNsXt1SllOA2allFJKuWbpW4ABZ90hnzdNhdtmQtp58OU9MP95W5enlNU0YFZK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\n",
      "text/plain": [
       "<Figure size 864x576 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import Draw\r\n",
    "reload(Draw)\r\n",
    "%matplotlib inline\r\n",
    "index_value = list(index_df[index_df['trade_date']==test_date_min+1]['pre_close']) + list(index_df.sort_values('trade_date')['close'])\r\n",
    "Draw.Draw_Market_Value_Change(0, account.market_value_all, index_value)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false
   },
   "source": [
    "请点击[此处](https://ai.baidu.com/docs#/AIStudio_Project_Notebook/a38e5576)查看本环境基本用法.  <br>\n",
    "Please click [here ](https://ai.baidu.com/docs#/AIStudio_Project_Notebook/a38e5576) for more detailed instructions. "
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "PaddlePaddle 1.7.1 (Python 3.5)",
   "language": "python",
   "name": "py35-paddle1.2.0"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
